package cz.muni.fi.pa165.travelagency.api.entities;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 *
 * @author ljungman
 */
public interface IOrder extends Serializable {

    /**
     * Returns date when <code>IOrder</code> was created
     * @return date
     */
    Date getCreated();

    /**
     * Returns <code>ICustomer</code> who created this <code>IOrder</code>
     * @return <code>ICustomer</code>
     */
    ICustomer getCustomer();

    /**
     * Returns id of <code>IOrder</code>
     * @param id 
     */
    Long getId();

    /**
     * Returns for how many people is this <code>IOrder</code>
     * @return number of persons on <code>IOrder</code>
     */
    int getNumberOfPersons();

    /**
     * Returns ordered <code>IPackageTour</code>
     * @return <code>IPackageTour</code>
     */
    IPackageTour getOrderedPackageTour();

    /**
     * Returns list of ordered <code>ITour</code>s
     * @return ordered <code>ITour</code>s
     */
    List<ITour> getOrderedTours();

    /**
     * Returns total price of <code>IOrder</code>
     * @return price
     */
    BigDecimal getPrice();

    /**
     * Indicates if <code>IOrder</code> is already paid for
     * @return <code>true<code> if <code>IOrder</code> is paid
     */
    boolean isPaid();

    /**
     * Sets date when <code>IOrder</code> was created
     * @param created 
     */
    void setCreated(Date created);

    /**
     * Sets <code>ICustomer</code> who created this <code>IOrder</code>
     * @param customer <code>ICustomer</code> 
     */
    void setCustomer(ICustomer customer);

    /**
     * Sets id of <code>IOrder</code>
     * @param id 
     */
    void setId(Long id);

    /**
     * Sets how many people is this <code>IOrder</code> for
     * @param numberOfPersons 
     */
    void setNumberOfPersons(int numberOfPersons);

    /**
     * Sets ordered <code>IPackageTour</code>
     * @param orderedPackageTour <code>IPackageTour</code>
     */
    void setOrderedPackageTour(IPackageTour orderedPackageTour);

    /**
     * Sets list of ordered <code>ITour</code>s
     * @param orderedTours <code>ITour</code>
     */
    void setOrderedTours(List<ITour> orderedTours);

    /**
     * Sets indication that <code>IOrder</code> was paid or not
     * @param paid <code>true</code> if <code>IOrder</code> was paid
     */
    void setPaid(boolean paid);

    /**
     * Sets total price of <code>IOrder</code>
     * @param price 
     */
    void setPrice(BigDecimal price);
}
